1. Field of the Invention
The present invention generally relates to generation of geometric primitives during tessellation of surfaces, and more specifically to the time slice processing of tessellation and geometry shaders.
2. Description of the Related Art
In prior graphics systems, primitives were processed in multiple graphics pipelines concurrently in a single pass. In the single pass scheme, internally generated primitives stayed within the same graphics pipeline all the way up to the rasterization step. Tessellation and geometry shaders can generate a highly variable and potentially large number of primitives, which for example might occur when tessellating a surface into many small primitives with a high level-of-detail (LOD). This expansion of work, if processed in a single stage, can cause serialization of the multiple graphics pipelines due to resource limitations and the serialization reduces the processing performance. Even if resource limitations do not cause serialization, the variable amount of work in different graphics pipelines can reduce performance to that of the slowest graphics pipeline.
One mechanism to avoid processing primitives in a single pass is to buffer all primitives that are generated in a buffer (such as the Frame Buffer of a graphics pipeline) and then executing the primitives stored in the buffer in a second pass. One drawback to such an implementation is that a significant amount of memory space is utilized to buffer the generated primitives. A second drawback is that downstream shaders remain idle while the primitives are being generated and buffered. A third drawback is that the communication between the first pass and the second pass is dependent on the limited bandwidth of the buffer, thus adversely impacting the overall performance of the system
Accordingly, what is needed in the art is a system and method for balancing the primitive processing workload generated by tessellation and geometry shaders for processing by multiple graphics pipelines.